package com.feng.study.pay;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayConfig;
import com.github.wxpay.sdk.WXPayConstants;
import com.github.wxpay.sdk.WXPayUtil;

public class WeChatPay {

    private static final String APP_ID = "YOUR_APP_ID"; // 微信公众号或小程序等的APP ID
    private static final String MCH_ID = "YOUR_MCH_ID"; // 商户号
    private static final String API_KEY = "YOUR_API_KEY"; // API密钥

    public static void main(String[] args) throws Exception {
        // 初始化微信支付配置
        WXPayConfig config = new WXPayConfig() {
            @Override
            public String getAppID() {
                return APP_ID;
            }

            @Override
            public String getMchID() {
                return MCH_ID;
            }

            @Override
            public String getKey() {
                return API_KEY;
            }

            @Override
            public InputStream getCertStream() {
                return null; // 不需要证书，返回null
            }

            @Override
            public int getHttpConnectTimeoutMs() {
                return 8000;
            }

            @Override
            public int getHttpReadTimeoutMs() {
                return 10000;
            }
        };

        // 创建WXPay对象
        WXPay wxPay = new WXPay(config, WXPayConstants.SignType.MD5);

        // 构造请求参数
        Map<String, String> reqData = new HashMap<>();
        reqData.put("mch_appid", APP_ID); // 商户号的APP ID
        reqData.put("mchid", MCH_ID); // 商户号
        reqData.put("nonce_str", WXPayUtil.generateNonceStr()); // 随机字符串
        reqData.put("partner_trade_no", "YOUR_ORDER_NO"); // 商户订单号，唯一
        reqData.put("openid", "YOUR_OPENID"); // 用户openid
        reqData.put("check_name", "NO_CHECK"); // 不校验真实姓名
        reqData.put("amount", "100"); // 付款金额（单位为分）
        reqData.put("desc", "企业付款"); // 付款描述
        reqData.put("spbill_create_ip", "127.0.0.1"); // 发起付款的IP地址

        // 签名并发送请求
        Map<String, String> resp = wxPay.unifiedOrder(reqData);

        // 处理响应结果
        if (resp != null) {
            if ("SUCCESS".equals(resp.get("return_code")) && "SUCCESS".equals(resp.get("result_code"))) {
                // 成功处理，进行后续操作
            } else {
                // 处理失败，进行相应提示或重试等操作
            }
        }
    }
}

